
/*
 * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
 *
 * (b)  If this Sample Code is distributed as part of the Display PostScript
 *	System Software Development Kit from Adobe Systems Incorporated,
 *	then this copy is designated as Development Software and its use is
 *	subject to the terms of the License Agreement attached to such Kit.
 *
 * (c)  If this Sample Code is distributed independently, then the following
 *	terms apply:
 *
 * (d)  This file may be freely copied and redistributed as long as:
 *	1) Parts (a), (d), (e) and (f) continue to be included in the file,
 *	2) If the file has been modified in any way, a notice of such
 *      modification is conspicuously indicated.
 *
 * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
 *	Adobe Systems Incorporated.
 * 
 * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
 *	CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
 *	AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
 *	ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
 *	OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
 *	WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
 *	WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
 *	DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
 *	FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
 *	OF THIRD PARTY RIGHTS.
 */

/*
 *	iparserhooks.m
 *
 *	Version:	2.0
 *	Author:	Ken Anderson, Ken Fromm
 *	History:
 *			03-07-91		Added this comment.
 */

#import "iinterpreter.h"
#import "iinterpreterhooks.h"
#import "Graphic.h"
#import <dpsclient/dpsclient.h>
#import <stdio.h>

extern char		yytext[];
extern int			yyleng;

void i_int()
{
	int	avalue;

	sscanf(yytext,"%d", &avalue);
	ipushint(avalue);
}

void i_real()
{
	float	 avalue;

	sscanf(yytext,"%f", &avalue);
	ipushreal(avalue);
}

/* Omit the preceding slash. */
void i_literal()
{
	ipushname(&yytext[1], yyleng-1);
}

void i_name()
{
	printf("%s\n", yytext);
}

void i_array()
{
}

/* Disregard the open and close parens. */
void i_string()
{
	ipushstring(&yytext[1], yyleng-2);		
}

void i_f()
{
	iinsertPath(FILL);
}

void i_s()
{
	iinsertPath(STROKE);
}

void i_clip()
{
	iinsertPath(CLIP);
}

void i_T()
{
	iclear();
}

void i_A()
{
	iclear();
}

void i_W()
{
	iclear();
}

void i_AW()
{
	iclear();
}

void i_m()
{
	iinsertPathOp(dps_moveto,2);
}

void i_lineto()
{
	iinsertPathOp(dps_lineto,2);
}

void i_L()
{
	int		i, index;

	ipopint(&index);
	for (i = index; i > 0; i--)
		iinsertPathOp(dps_lineto,2);
}

void i_r()
{
	iinsertPathOp(dps_rlineto,2);
}

void i_R()
{
	int		i, index;

	ipopint(&index);
	for (i = index; i > 0; i--)
		iinsertPathOp(dps_rlineto,2);
}

void i_l()
{
	iinsertPathOp(dps_moveto,2);
	iinsertPathOp(dps_lineto,2);
	iinsertPath(STROKE);
}

void i_x()
{
	ipushreal(0.0);
	iinsertPathOp(dps_rlineto,2);
}

void i_y()
{
	ipushreal(0.0);
	iroll(2,1);
	iinsertPathOp(dps_rlineto,2);
}

void i_X()
{
	iinsertPathOp(dps_moveto,2);
	ipushreal(0.0);
	iinsertPathOp(dps_rlineto,2);
	iinsertPath(STROKE);
}

void i_Y()
{
	iinsertPathOp(dps_moveto,2);
	ipushreal(0.0);
	iroll(2,1);
	iinsertPathOp(dps_rlineto,2);
	iinsertPath(STROKE);
}

void i_c()
{
	iinsertPathOp(dps_curveto,6);
}

void i_cp()
{
	iinsertPathOp(dps_closepath,0);
}

void i_w()
{
	float		avalue;
	
	ipopreal(&avalue);
	ii_setlinewidth(avalue);
}

void i_g()
{
	float		avalue;
	
	ipopreal(&avalue);
	ii_setgray(avalue);
}

void i_j()
{
	int		avalue;
	
	ipopint(&avalue);
	ii_setlinejoin(avalue);
}

void i_d()
{
	/* setdash not implemented */
	iclear();
}

void i_miter()
{
	float		avalue;
	
	ipopreal(&avalue);
	ii_setmiterlimit(avalue);
}

void i_cap()
{
	float		avalue;
	
	ipopreal(&avalue);
	ii_setlinecap(avalue);
}

void i_RGB()
{
	float		r, g, b;
	
	ipopreal(&b);
	ipopreal(&g);
	ipopreal(&r);
	ii_setrgbcolor(r, g, b);
}

void i_F()
{
	/*  setfont not implemented */
	iclear();
}

void i_MF()
{
	/*  makefont not implemented */
	iclear();
}

void i_FF()
{
	/*  setfont not implemented */
	iclear();
}

void i_DF()
{
	/*  definefont not implemented */
	iclear();
}

void i_IMASK()
{
	/*  imagemask not implemented */
	iclear();
}

void i_IMAGE()
{
	/*  image not implemented */
	iclear();
}

void i_BPAGE()
{
	ipop();
}

void i_EPAGE()
{
	int	page_num;
	
	ipopint(&page_num);
	iinsertPage(page_num);
}

void i_REMAP()
{
	iclear();
}

void i_RECODE()
{
	iclear();
}

